import fetch from 'dva/fetch';
import { message } from 'antd';
import { ERROR_MSG_DURATION } from '../constants/constants';

function parseJSON(response) {
  // console.log(response);
  // if (response.status >= 200 && response.status < 300) {
  //   return response;
  // }
  return response.json();
}
function checkReturnCode(data) {
  if (data.code !== 200) {
    // const error = new Error(data.message);
    // error.code = data.code;
    // error.message = data.message;
    // throw error;
    message.error(data.message, ERROR_MSG_DURATION);
    if (data.code === 302) {
      setTimeout(() => {
        document.location.replace('/');// eslint-disable-line
      }, 2000);
    }
  }
  return data;
}
function checkStatus(response) {
  if (response.status >= 200 && response.status < 300) {
    return response;
  }

  const error = new Error(response.statusText);
  error.response = response;
  throw error;
}

/**
 * Requests a URL, returning a promise.
 *
 * @param  {string} url       The URL we want to request
 * @param  {object} [options] The options we want to pass to "fetch"
 * @return {object}           An object containing either "data" or "err"
 */
export default function request(url, options) {
  return fetch(url, { ...options, credentials: 'include' })
    .then(checkStatus)
    .then(parseJSON)
    .then(checkReturnCode)
    .then(data => ({ data }))
    .catch(err => ({ err }));
}
